package core

import (
	"context"
	"flow-calc/config"
)

/**
 *    Description: 抽象层function
 *    Date: 2024/3/18
 */

// Function 抽象层function 流式计算基础计算模块,通过Function的调用结束后,默认可以调度到下一个Function的节点,
// Flow 是由任意个个Function组成。

type Function interface {
	// Call 执行流式计算回调核心逻辑
	Call(ctx context.Context, flow Flow) error

	// SetConfig 给当前Function实例配置策略
	SetConfig(s *config.FuncConfig) error
	// GetConfig 获取当前Function实例配置策略
	GetConfig() *config.FuncConfig

	// SetFlow 给当前Function实例设置所依赖的Flow实例
	SetFlow(f Flow) error
	// GetFlow 获取当前Function实力所依赖的Flow
	GetFlow() Flow
	// AddConnector 给当前Function实例添加一个连接器
	AddConnector(conn Connector) error
	// GetConnector 获取当前Function实例的连接器
	GetConnector() Connector
	// CreateId 给当前Function实力生成一个随机的实例KisID
	CreateId()
	// GetId 获取当前Function的FID
	GetId() string
	// GetPrevId 获取当前Function上一个Function节点FID
	GetPrevId() string
	// GetNextId 获取当前Function下一个Function节点FID
	GetNextId() string

	// NextF 返回下一层计算流Function，如果当前层为最后一层，则返回nil
	NextF() Function
	// PrevF 返回上一层计算流Function，如果当前层为最后一层，则返回nil
	PrevF() Function
	// SetN 设置下一层Function实例
	SetN(f Function)
	// SetP 设置上一层Function实例
	SetP(f Function)
	// GetMetaData 获取当前Function实例的元数据
	GetMetaData(key string) interface{}
	// SetMetaData 设置当前Function实例的元数据
	SetMetaData(key string, value interface{})
}
